![CloudWatchAgentのログ送信にフィルタ機能が追加されたのでやってみた](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-cloudwatch.png)
CloudWatchAgentのログ送信にフィルタ機能が追加されたのでやってみた
エルデンリングでは信仰ビルドが好きです。AWS事業本部コンサルティング部の後藤です。
2月25日のアップデートでCloudWatchAgentがCloudWatchlogsにログを送信するときにフィルタ設定が可能になっていたので試してみました。OSログやミドルウェアログをCloudWatchLogsに送信して色々やりたいけど、CloudWatchLogsはログの取り込みに費用がかさむため、全てのログをCloudWatchLogsに送信するのは抵抗があったあなたにピッタリな機能追加かもしれません。
やっていきましょう!
CloudWatchAgent最新版取得
最新機能を使用するため、最新バージョンのCloudWatchAgentが必要になるためS3から取得してインストールしましょう。
今回はEC2、AmazonLinux2で試しています。
# wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm # rpm -ivh amazon-cloudwatch-agent.rpm # cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION 1.247350.0b251780
CloudWatchAgent設定
以下のようなconfig.jsonを用意しました。
{ "agent": { "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/home/ec2-user/test.log", "log_group_name": "test.log", "log_stream_name": "{instance_id}", "retention_in_days": 30, "filters": [ { "type": "include", "expression": "hoge" } ] } ] } } } }
Filters設定要素について
今回追加された機能はfiltersの部分になります。filtersでは以下の要素を設定します。
- type
- include : 一致するログエントリをCloudWatchLogsに送信。
- exclude : 一致するログエントリをCloudWatchLogsに送信しない。
- expression
- 文字列を記載、正規表現の使用が可能。
上記config.jsonでは、hogeが含まれたログのみCloudWatchLogsに送信する設定となります。試してみましょう。
$ echo hoge >> test.log $ echo hogehoge >> test.log $ echo fuga >> test.log
適当なログを指定したファイルに流して、CloudWatchLogsのロググループを見に行きます。
狙い通り、hogeが含まれているログのみCloudWatchLogsに送信されている事が確認できました。
Filters機能の処理について
Filtersが複数設定されている場合、CloudWatchAgentは上から順序に処理を行うようです。以下のconfig.jsonを例に確認してみましょう。
{ "agent": { "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/home/ec2-user/test2.log", "log_group_name": "test2.log", "log_stream_name": "{instance_id}", "retention_in_days": 30, "filters": [ { "type": "exclude", "expression": "hoge" }, { "type": "include", "expression": "h(uga|oge)" } ] } ] } } } }
上記config.jsonでは、hogeが含まれるログを除外しつつ、hugaとhogeが含まれるログをCloudWatchLogsに送信する設定になっています。
Filters機能が上から順序に処理が行われるのであれば、hogeは含まれず、hugaのみ送信されます。試してみましょう。
$ echo hoge >> test2.log $ echo hogehoge >> test2.log $ echo huga >> test2.log
適当なログを指定したファイルに流して、CloudWatchLogsのロググループを見に行きます。
hugaのみロググループに送信されている事が確認できました。
まとめ
CloudWatchAgentに追加されたログのFilters機能を試してみました。正規表現が使用出来るため色々やりようがありそうですね。CloudWatchlogsはログ取り込みに結構な費用が掛かりますので、上手く使えば少し費用を抑える事が出来るかもしれません。是非試してみてください!